package com.rw.tool.util.expression.expression.tree;

import com.rw.tool.util.expression.element.ExpressionElement;
import lombok.Getter;

/**
 * 表达式节点
 * 不管是什么表达式，最终还是树形结构
 */
@Getter
public class ElementNode {
    // 当前节点的元素
    private final ExpressionElement element;

    // 左节点
    private ElementNode leftNode;

    // 有节点
    private ElementNode rightNode;

    public ElementNode(ExpressionElement element, ElementNode leftNode, ElementNode rightNode) {
        this.element = element;
        this.leftNode = leftNode;
        this.rightNode = rightNode;
    }

    public ElementNode(ExpressionElement element) {
        this.element = element;
    }

    /**
     * 设置子节点
     */
    public void setChildNode(ElementNode leftNode, ElementNode rightNode) {
        this.leftNode = leftNode;
        this.rightNode = rightNode;
    }

    /**
     * 是否是子节点
     * 表达式树如果是子节点，则元素一定是数字元素
     * 并且如果有子节点，那一定两边都有
     */
    public boolean isChild() {
        return leftNode == null;
    }
}
